﻿#ifndef ZOOMABLEIMAGEWIDGET_H
#define ZOOMABLEIMAGEWIDGET_H

/**
 * @brief The ZoomableImageWidget class
 * 可缩放图片控件
 * 1 支持设置单张图片
 * 2 图片可缩放，拖拽
 *
 * 后续增加
 * 1 支持设置单张图片
 * 2 多张图片支持图片上下切换
 */

#include <QWidget>

class QPushButton;
class ZoomableImageWidget : public QWidget {
    Q_OBJECT
  public:
    explicit ZoomableImageWidget(QWidget *parent = nullptr);
    ~ZoomableImageWidget();

  public:
    /**
     * @brief setPixmap 设置图片
     * @param pixmap
     */
    void setPixmap(const QPixmap &pixmap);

#if 0
    /**
     * @brief setPixmaps 设置多张图片
     * @param pixmaps
     */
    void setPixmaps(const QVector<QPixmap> &pixmaps);
#endif

    /**
     * @brief setZoomInterval 设置缩放间隔
     * @param interval
     */
    void setZoomInterval(float interval);

    /**
     * @brief setZoomMaxValue 设置缩放最大倍数
     * @param max
     */
    void setZoomMaxValue(float max);

    /**
     * @brief setZoomMinValue 设置缩放最小倍数
     * @param min
     */
    void setZoomMinValue(float min);

  private:
    void initButtons();
    void zoomInImage();
    void zoomOutImage();

  protected:
    void paintEvent(QPaintEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void mouseReleaseEvent(QMouseEvent *event) override;
    void mouseDoubleClickEvent(QMouseEvent *event) override;
    void wheelEvent(QWheelEvent *event) override;

  signals:

  private:
    QPushButton *m_btnClose;  // 关闭按键
    QPixmap m_currentPixmap;

#if 0
    QPushButton *m_btnPrev;   // 上一张
    QPushButton *m_btnNext;   // 下一张
    QVector<QPixmap> m_vecPixmaps;
    int m_pixmapsCount;
    int m_currentPixmapIndex;
#endif
    float m_zoomValue;       // 缩放倍数
    float m_zoomInterval;
    float m_zoomMaxValue;
    float m_zoomMinValue;
    int m_offsetX;          // X轴位移量
    int m_offsetY;          // Y轴位移量
    QPoint m_pressPoint;    // 鼠标按下的位置
    bool m_isPressed;
};

#endif // ZOOMABLEIMAGEWIDGET_H
